package com.sjz.service;

import java.util.ArrayList;
import java.util.List;

import com.sjz.domain.Person;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;


/****
 * 数据增删改查  使用方法来进行操作
 * @author Administrator
 *
 */
public class OtherPersonService {
	private DBOpenHelper dbOpenHelper;

	public OtherPersonService(Context context) {
		this.dbOpenHelper = new DBOpenHelper(context);
	}
	/**
	 * 添加记录
	 * @param person
	 */
	public void save(Person person){
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put("name", person.getName());  //key 对应的是表字段的名称 value对应的值
		values.put("phone", person.getPhone());
		values.put("amount", person.getAmount());
		//第一个参数  表名
		//第二个参数    空值名称  解决的问题是  如果第三个参数传入的参数的值是null或者为空时，为了内容不为空 来设置
		//如果第三个值不为空的话，不需要考虑第二个参数的作用
		//ContentValues 对象    map形式存
		db.insert("person", null, values);
	}
	/**
	 * 删除记录
	 * @param id 记录ID
	 */
	public void delete(Integer id){
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		//第一个参数  表名
		//第二个参数   参数的表达式
		//第三个参数  参数的值
		db.delete("person", "personid=?", new String[]{id.toString()});
	}
	/**
	 * 更新记录
	 * @param person
	 */
	public void update(Person person){
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put("name", person.getName());
		values.put("phone", person.getPhone());
		values.put("amount", person.getAmount());
		//第一个参数  表名
		//第二个参数  更新的值
		//第三个参数  参数表达式
		//第四个参数  参数表达式需要的值
		db.update("person", values, "personid=?", new String[]{person.getId().toString()});
	}
	/**
	 * 查询记录
	 * @param id 记录ID
	 * @return
	 */
	public Person find(Integer id){
		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
		Cursor cursor =
				db.query("person", null, "personid=?", new String[]{id.toString()}, null, null, null);
           //第一个参数  表名
		   //第二个参数   查询的字段  如果是null 表示的是所有的字段
		   //第三个参数   查询表达式
		    // 第四个参数  参数表达式对应的值  
		    // 第五个参数 groupBy,
		    //第六个参数  having
		    // 第七个参数  String orderBy
		if(cursor.moveToFirst()){
			int personid = cursor.getInt(cursor.getColumnIndex("personid"));
			int amount = cursor.getInt(cursor.getColumnIndex("amount"));
			String name = cursor.getString(cursor.getColumnIndex("name"));
			String phone = cursor.getString(cursor.getColumnIndex("phone"));
			return new Person(personid, name, phone, amount);
		}
		cursor.close();
		return null;
	}
	/**
	 * 分页获取记录
	 * @param offset 跳过前面多少条记录
	 * @param maxResult 每页获取多少条记录
	 * @return
	 */
	public List<Person> getScrollData(int offset, int maxResult){
		List<Person> persons = new ArrayList<Person>();
		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
		Cursor cursor = db.query("person", null, null, null, null, null, "personid asc", offset+ ","+ maxResult);
		//String table,  表名
		//String[] columns,  字段  null 表示查询所有的条件
		// String selection,
		//String[] selectionArgs,
		//String groupBy, 
		//String having, 
		//String orderBy, 
		//String limit
		while(cursor.moveToNext()){
			int personid = cursor.getInt(cursor.getColumnIndex("personid"));
			int amount = cursor.getInt(cursor.getColumnIndex("amount"));
			String name = cursor.getString(cursor.getColumnIndex("name"));
			String phone = cursor.getString(cursor.getColumnIndex("phone"));
			persons.add(new Person(personid, name, phone, amount));
		}
		cursor.close();
		return persons;
	}
	/**
	 * 获取记录总数
	 * @return
	 */
	public long getCount(){
		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
		//String table,
		// String[] columns,   new String[]{"count(*)"} 统计总数  
		//String selection,
		// String[] selectionArgs, 
		//String groupBy, 
		//String having,
		// String orderBy
		Cursor cursor = db.query("person", new String[]{"count(*)"}, null, null, null, null, null);
		cursor.moveToFirst();
		long result = cursor.getLong(0);
		cursor.close();
		return result;
	}
}
